package com.gy.boot.common.util;

import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;

/** 同步锁工具  */
public class LockTool {

    /** 将进度条信息放入缓存中, 用于用户下载 (可用时间, 20分钟 1200 000, 20分钟后没有操作进度条, 自动失效) */
    private static final TimedCache<String, String> LockCache = CacheUtil.newTimedCache(1200000);
    /** 开启同步锁 */
    public static boolean openLock(String lockId, String uuid) {
        if (StrUtil.isBlank(lockId)) { return false; } // 不设置锁;
        if (StrUtil.isBlank(uuid)) { return false; } // 不设置锁;
        synchronized (lockId.intern()) {
            boolean isLock = LockCache.get(lockId) != null;
            if (isLock) { return true; }
            LockCache.put(lockId, uuid);
            return false;
        }
    }
    /** 关闭同步锁 */
    public static void closeLock(String lockId, String uuid) {
        String val = LockCache.get(lockId);
        if (val == null) { return; }
        if (val.equals(uuid)) { LockCache.remove(lockId); }
    }

    /** 同步锁UUID */
    public synchronized static String getUUID() {
        return IdUtil.simpleUUID();
    }


}
